package com.crm.service.sys;

import com.crm.model.entity.sys.UserAccount;
import com.crm.model.qo.sys.UserAccountQO;
import com.crm.model.vo.user.UserAccountManagerVO;

import java.util.List;

/**
 * @author luojie
 * @date 2020/9/23 15:03
 */
public interface UserAccountDbService {

    /**
     * 根据用户id查询用户账号信息
     * @param accountId
     * @return
     */
    UserAccount selectUserAccountByAccountId(String accountId);

    /**
     * 根据用户名查询用户信息
     * @param userAccount
     * @return
     */
    UserAccount selectUserAccountByUserAccount(String userAccount);

    /**
     * 根据deptId查询用户账号列表
     * @param deptId
     * @return
     */
    List<UserAccount> selectUserAccountListByDeptId(String deptId);


    /**
     * 插入用户账号信息
     * @param userAccount
     * @return
     */
    Boolean insertUserAccount(UserAccount userAccount);

    /**
     * 根据用户id更新用户账号信息
     * @param userAccount
     * @return
     */
    Boolean updateUserAccountByUserId(UserAccount userAccount);

    /**
     * 查询用户账号列表
     * @return
     */
    List<UserAccount> selectUserAccountList();

    /**
     * 根据公司id查询账号列表
     * @param companyId
     * @return
     */
    List<UserAccount> selectUserAccountByCompanyId(String companyId);

    /**
     * 根据公司id查询账号列表排除登录人自己
     * @param companyId
     * @return
     */
    List<UserAccount> selectUserAccountByCompanyIdExcludeLoginPerson(String companyId);

    /**
     * 根据公司id获取在职且未禁用账号列表
     * @Author renshaorong
     * @Date 2021/7/13
     */
    List<UserAccountManagerVO> getAbleAccountListByCompanyId(String companyId);

    /**
     *合同管理-合作开发人员
     * @return
     */
    List<UserAccount> getAllCoDeveloper();

    /**
     * 获取所有账号
     * @Author pym
     * @Date  2021/3/17 10:21
     * @param 
     * @return {@link {java.util.List<com.crm.model.entity.sys.UserAccount>}}
     */
    List<UserAccount> getAllAccountList();


    /**
     * @Description: 获取所有在职且未禁用账号列表
     * @Param: []
     * @Return: java.util.List<com.crm.model.entity.sys.UserAccount>
     * @Author: lixq-f
     * @Date: 2021/7/27
    **/
    List<UserAccountManagerVO> getAllUsedAccountList();

    /**
     * 根据账号ID查询用户ID
     * @param accountIds --账号ID集合
     * @return
     */
    List selectUserIdListByAccountIds(List<String> accountIds);

    /**
     * 给定筛选条件查询用户信息列表（超级管理员）
     * @Author renshaorong
     * @Date 2021/4/7
     * @param userAccountQO 筛选条件
     * @param toString 排序
     * @return
     */
    List<UserAccountManagerVO> selectAllUserAccountList(UserAccountQO userAccountQO, String toString);

    /**
     * 给定筛选条件查询用户信息列表（普管）
     * @Author renshaorong
     * @Date 2021/4/7
     * @param userAccountQO 筛选条件
     * @param toString 排序
     * @return
     */
    List<UserAccountManagerVO> selectUserAccountListByCompanyId(UserAccountQO userAccountQO, String toString);

    /**
     * 根据主键更新用户账号信息（字段为空时不更新）
     * @Author renshaorong
     * @Date 2021/4/8
     * @param userAccount
     * @return
     */
    Boolean updateUserAccountByPrimaryKeySelective(UserAccount userAccount);

    /***
     * @Description:根据账号名查询账号是否存在
     * @Param: accountName 账号名
     * @Author: luojie
     * @Date: 2021/5/19 11:33
     */
    Boolean selectUserAccountByAccountName(String accountName);

    List<UserAccount> selectUserIdNotNull();

    /**
     * 查询分机号是否存在
     * @Author pym
     * @Date  2021/6/9 9:00
     * @param extensionNumber 分机号
     * @return {@link {java.lang.Boolean}}
     */
    Boolean selectUserAccountByExtensionNumber(String extensionNumber);

    /**
     * 根据用户名和账号查询账号是否存在
     * @param userName
     * @param userAccount
     * @return
     */
    UserAccountManagerVO selectUserAccountCount(String userName, String userAccount,String companyId);

    /**
     * 根据账号id物理删除
     * @param accountId
     */
    void deleteUserAccountById(String accountId);

    UserAccount selectUserAccountByName(String owner);

    /**
     * 根据用户名和公司id查询账号信息
     * @param createName
     * @param companyId
     * @return
     */
    UserAccountManagerVO selectUserAccountByNameAndCompanyId(String createName, String companyId);

    /**
     *据用户名查询账号信息
     * @param accountName 用户名
     * @return
     */
    UserAccount selectUserAccountByUserName(String accountName);

    /**
     * 根据公司查询离职用户
     * @param companyId
     * @return
     */
    List<UserAccountManagerVO> selectLeaveUserAccountByCompanyId(String companyId);

    /**
     * 通过用户名和分公司id查询账户信息
     * @param accountName 用户名
     * @param companyId 分公司id
     * @return
     */
    UserAccount selectUserAccountByUserNameAndCompanyId(String accountName, String companyId);

    /**
     * 根据邮箱查询账号信息
     * @Author pym
     * @Date  2021/7/29 15:32
     * @param email 邮箱
     * @return {@link {com.crm.model.vo.user.UserAccountManagerVO}}
     */
    UserAccountManagerVO getUserAccountByEmail(String email);

    UserAccount selectUserAccountByCompanyIdAndUserName(String companyId,String UserName);

    List<UserAccount> getAccountListPageByCompanyId(String companyId,String userName);

    UserAccount selectUserAccountByUserId(String userId);

    /**
     * 查询用户
     * @return
     */
    List<UserAccountManagerVO> selectUserList(String companyId,String accountId);
}
